package com.css.bjdt_report.cell.service;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.css.bjdt_report.cell.dao.CellDao;
import com.css.bjdt_report.cell.entity.Cell;
import com.css.bjdt_report.cell.entity.Cell.CellType;
import com.css.bjdt_report.cell.entity.CellExample;
import com.css.bjdt_report.util.CommonUtil;

@Service
public class CellService {
	@Autowired
	private Dao dao;
	@Autowired
	private CellDao cellDao;

	public List<Cell> getCellsByTemplateId(String templateId) {
		if (StringUtils.isBlank(templateId)) {
			return null;
		}
		//		return dao.query(Cell.class, Cnd.where("TEMPLATE_ID", "=", templateId));
		CellExample example = new CellExample();
		example.createCriteria().andTemplateIdEqualTo(templateId);
		return cellDao.selectByExample(example);
	}
	
	public List<Cell> getCellStrategyByTemplateId(String templateId) {
		return cellDao.selectCellStrategyByTemplateId(templateId);
	}

	public List<Cell> getCellsByTemplateIdAndType(String templateId, CellType cellType) {
		if (StringUtils.isBlank(templateId) || cellType == null) {
			return null;
		}
		//		return dao.query(Cell.class, Cnd.where("TEMPLATE_ID", "=", templateId).and("CELL_TYPE", "=", cellType.getKey()));
		CellExample example = new CellExample();
		example.createCriteria().andTemplateIdEqualTo(templateId).andCellTypeEqualTo(cellType.getKey());
		return cellDao.selectByExample(example);

	}

	public boolean batchInsert(List<Cell> records) {
		if (records == null || records.size() == 0) {
			return false;
		}
		for (Cell cell : records) {
			if (StringUtils.isBlank(cell.getCellId())) {
				cell.setCellId(CommonUtil.getUUID());
			}
			cellDao.insert(cell);
		}
		//		dao.insert(records);
		return true;
	}

	public boolean clear(String templateId) {
		if (StringUtils.isBlank(templateId)) {
			return false;
		}
		//		dao.clear(Cell.class, Cnd.where("TEMPLATE_ID", "=", templateId));
		cellDao.deleteByTemplateId(templateId);
		return true;
	}

	//查询出所有需要填写批注的单元格
	public List<Cell> getAllNeedCommentCell(String templateId) {
		/*		List<Cell> cellList = dao.query(Cell.class, Cnd.where("TEMPLATE_ID", "=", templateId).and("IS_COMMENT", "=", "2"));
				return cellList;*/
		CellExample example = new CellExample();
		example.createCriteria().andTemplateIdEqualTo(templateId).andIsCommentEqualTo("2");
		return cellDao.selectByExample(example);
	}

	//根据CELLID查询出当前单元格的对象
	public Cell getACellEntity(String cellId) {
		/*		Cell cell = dao.fetch(Cell.class, Cnd.where("CELL_ID", "=", cellId));
				return cell;*/
		return cellDao.selectByPrimaryKey(cellId);
	}

	public void update(List<Cell> cells) {
		//		dao.updateIgnoreNull(cells);
		for (Cell cell : cells) {
			cellDao.updateByPrimaryKeySelective(cell);
		}
	}

	public String getCellIdByTemplateIdRowCol(String templateId, String row, String col) {
		Cell cell = dao.fetch(Cell.class,
				Cnd.where("templateId", "=", templateId).and("ABS_ROW_NUM", "=", row).and("ABS_COL_NUM", "=", col));
		return cell.getCellId();
	}

	public Cell getCellByTemplateIdRowCol(String templateId, String row, String col) {
		return dao.fetch(Cell.class,
				Cnd.where("templateId", "=", templateId).and("ABS_ROW_NUM", "=", row).and("ABS_COL_NUM", "=", col));
	}
}
